home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / MosaicSRC / libwww2 / HTPlain.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-03-13  |  2.6 KB  |  135 lines

  1. /*        Plain text object        HTWrite.c
  2. **        =================
  3. **
  4. **    This version of the stream object just writes to a socket.
  5. **    The socket is assumed open and left open.
  6. **
  7. **    Bugs:
  8. **        strings written must be less than buffer size.
  9. */
  10. #include "HTPlain.h"
  11. #include "HTUtils.h"
  12. #include "HText.h"
  13. #include "HTFile.h"
  14. #include "HTCompressed.h"
  15.  
  16. /*        HTML Object
  17. **        -----------
  18. */
  19.  
  20. struct _HTStream {
  21.     CONST HTStreamClass *    isa;
  22.  
  23.     HText *         text;
  24.         int compressed;
  25. };
  26.  
  27. /* #define TRACE 1 */
  28.  
  29. /*_________________________________________________________________________
  30. **
  31. **            A C T I O N     R O U T I N E S
  32. */
  33.  
  34. /*    Character handling
  35. **    ------------------
  36. */
  37.  
  38. PRIVATE void HTPlain_put_character ARGS2(HTStream *, me, char, c)
  39. {
  40.     HText_appendCharacter(me->text, c);
  41. }
  42.  
  43.  
  44.  
  45. /*    String handling
  46. **    ---------------
  47. **
  48. */
  49. PRIVATE void HTPlain_put_string ARGS2(HTStream *, me, CONST char*, s)
  50. {
  51.     HText_appendText(me->text, s);
  52. }
  53.  
  54.  
  55. PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
  56. {
  57.     HText_appendBlock (me->text, s, l);
  58. }
  59.  
  60.  
  61.  
  62. /*    Free an HTML object
  63. **    -------------------
  64. **
  65. **    Note that the SGML parsing context is freed, but the created object is not,
  66. **    as it takes on an existence of its own unless explicitly freed.
  67. */
  68. PRIVATE void HTPlain_free ARGS1(HTStream *, me)
  69. {
  70.   if (me->compressed != COMPRESSED_NOT)
  71.     {
  72.       if (TRACE)
  73.         fprintf 
  74.           (stderr, 
  75.            "[HTPlain_free] OK, we're going to decompress HText\n");
  76.       HTCompressedHText (me->text, me->compressed, 1);
  77.     }
  78.  
  79.   free(me);
  80. }
  81.  
  82. /*    End writing
  83. */
  84.  
  85. PRIVATE void HTPlain_end_document ARGS1(HTStream *, me)
  86. {
  87.   HText_endAppend(me->text);
  88. }
  89.  
  90. PRIVATE void HTPlain_handle_interrupt ARGS1(HTStream *, me)
  91. {
  92.   HText_doAbort(me->text);
  93. }
  94.  
  95.  
  96.  
  97. /*        Structured Object Class
  98. **        -----------------------
  99. */
  100. PUBLIC CONST HTStreamClass HTPlain =
  101. {        
  102.     "SocketWriter",
  103.     HTPlain_free,
  104.     HTPlain_end_document,
  105.     HTPlain_put_character,     HTPlain_put_string, HTPlain_write,
  106.         HTPlain_handle_interrupt
  107. }; 
  108.  
  109.  
  110. /*        New object
  111. **        ----------
  112. */
  113. PUBLIC HTStream* HTPlainPresent ARGS5(
  114.     HTPresentation *,    pres,
  115.     HTParentAnchor *,    anchor,    
  116.     HTStream *,        sink,
  117.         HTFormat,               format_in,
  118.         int,                    compressed)
  119. {
  120.   HTStream* me = (HTStream*)malloc(sizeof(*me));
  121.   me->isa = &HTPlain;       
  122.   
  123.   if (TRACE)
  124.     fprintf (stderr, "[HTPlainPresent] here we are; format_in is '%s' and compressed is %d\n", HTAtom_name (format_in), compressed);
  125.   
  126.   me->text = HText_new();
  127.   me->compressed = compressed;
  128.  
  129.   HText_beginAppend(me->text);
  130.   if (me->compressed == COMPRESSED_NOT)
  131.     HText_appendText(me->text, "<PLAINTEXT>\n");
  132.  
  133.   return (HTStream*) me;
  134. }
  135.